/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.sysdrive.DAO;

import br.com.sysdrive.model.Compra;
import br.com.sysdrive.model.CompraProduto;
import br.com.sysdrive.model.Produto;
import br.com.sysdrive.util.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Rodrigo
 */
public class CompraProdutoDAOImpl {

    private Connection conn;

    public CompraProdutoDAOImpl() throws Exception {
        try {
            this.conn = ConnectionFactory.getConnection();
        } catch (Exception ex) {
            throw new Exception(ex.getMessage());
        }
    }

    public void cadastrar(CompraProduto compraProduto) {
        PreparedStatement stmt = null;
        String sql = "insert into compra_produto (qtd_compra_produto, observacao_compra_produto, id_compra, id_produto, status_compra_produto) values (?,?,?,?,?);";
        try {
            stmt = conn.prepareStatement(sql);
            stmt.setDouble(1, compraProduto.getQtdCompraProduto());
            stmt.setString(2, compraProduto.getObservacaoCompraProduto().toUpperCase());
            stmt.setInt(3, compraProduto.getCompra().getIdCompra());
            stmt.setInt(4, compraProduto.getProduto().getIdProduto());
            stmt.setString(5, compraProduto.getStatusCompraProduto().toUpperCase());
            stmt.execute();
        } catch (SQLException ex) {
            System.out.println("Problemas no SQL ao cadastrar CompraProduto! Erro: " + ex.getMessage());
            ex.printStackTrace();
        } catch (Exception ex) {
            System.out.println("Problemas ao cadastrar CompraProduto! Erro CompraProdutoDAO: " + ex.getMessage());
            ex.printStackTrace();
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar os parâmetros de conexão! Ero: " + ex.getMessage());
            }
        }
    }

    public List<Object> listar() {
        List<Object> resultado = new ArrayList<Object>();
        PreparedStatement stmt = null;
        ResultSet rs = null;
        String sql = "select c.* "
                + "from compra_produto c where c.status_compra_produto <> 'I';";
        try {
            stmt = conn.prepareStatement(sql);
            rs = stmt.executeQuery();
            while (rs.next()) {
                CompraProduto compraProduto = new CompraProduto();
                compraProduto.setIdCompraProduto(rs.getInt("id_compra_produto"));
                compraProduto.setObservacaoCompraProduto(rs.getString("observacao_compra_produto"));
                compraProduto.setQtdCompraProduto(rs.getDouble("qtd_compra_produto"));
                resultado.add(compraProduto);
            }
        } catch (SQLException ex) {
            System.out.println("Problemas no SQL ao listar CompraProduto! Erro: " + ex.getMessage());
            ex.printStackTrace();
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt, rs);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar os parâmetros de conexão! Erro CompraProdutoDAO: " + ex.getMessage());
                ex.printStackTrace();
            }
        }
        return resultado;
    }

    public Object carregar(int idObject) {
        PreparedStatement stmt = null;
        CompraProduto compraProduto = null;
        ResultSet rs = null;
        String sql = "select c.id_compra, c.id_produto, c.id_compra_produto, c.observacao_compra_produto, c.qtd_compra_produto "
                + " from compra_produto c where c.id_compra = ? and c.status_compra_produto <> 'I'; ";
        try {
            stmt = conn.prepareStatement(sql);
            stmt.setInt(1, idObject);
            rs = stmt.executeQuery();
            while (rs.next()) {
                compraProduto = new CompraProduto();
                compraProduto.setIdCompraProduto(rs.getInt("id_compra_produto"));
                compraProduto.setObservacaoCompraProduto(rs.getString("observacao_compra_produto"));
                compraProduto.setQtdCompraProduto(rs.getDouble("qtd_compra_produto"));

                Compra compra = new Compra();
                compra.setIdCompra(rs.getInt("id_compra"));

                Produto produto = new Produto();
                produto.setIdProduto(rs.getInt("id_produto"));

                compraProduto.setCompra(compra);
                compraProduto.setProduto(produto);
            }
            return compraProduto;
        } catch (SQLException ex) {
            System.out.println("Problemas no SQL ao Carregar CompraProduto! Erro CompraProdutoDAO: " + ex.getMessage());
            ex.printStackTrace();
            return null;
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt, rs);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar os parâmetros de conexão Carregar CompraProduto! Erro CompraProdutoDAO: " + ex.getMessage());
                ex.printStackTrace();

            }
        }

    }

    public Boolean alterar(Object object) {
        PreparedStatement stmt = null;
        CompraProduto compraProduto = (CompraProduto) object;
        String sql = "update compra_produto set observacao_compra_produto = ?, qtd_compra_produto = ?, id_compra = ?, id_produto = ?, status_compra_produto = ?"
                + " where id_compra_produto = ?";
        try {
            stmt = conn.prepareStatement(sql);
            stmt.setString(1, compraProduto.getObservacaoCompraProduto().toUpperCase());
            stmt.setDouble(2, compraProduto.getQtdCompraProduto());
            stmt.setInt(3, compraProduto.getCompra().getIdCompra());
            stmt.setInt(4, compraProduto.getProduto().getIdProduto());
            stmt.setString(5, compraProduto.getStatusCompraProduto().toUpperCase());
            stmt.setInt(6, compraProduto.getIdCompraProduto());
            stmt.executeUpdate();
            return true;
        } catch (SQLException ex) {
            System.out.println("Problemas no SQL ao alterar CompraProduto! Erro CompraProdutoDAO: " + ex.getMessage());
            return false;
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar parâmetros de conexão Alterar CompraProduto! Erro CompraProdutoDAO: " + ex.getMessage());
            }
        }
    }

    public Boolean alterarSatus(Object object) {
        PreparedStatement stmt = null;
        CompraProduto compraProduto = (CompraProduto) object;
        String sql = "update compra_produto set status_compra_produto = ?"
                + " where id_compra_produto = ?";
        try {
            stmt = conn.prepareStatement(sql);
            stmt.setString(1, compraProduto.getStatusCompraProduto().toUpperCase());
            stmt.setInt(2, compraProduto.getIdCompraProduto());
            stmt.executeUpdate();
            return true;
        } catch (SQLException ex) {
            System.out.println("Problemas no SQL ao alterar CompraProduto! Erro CompraProdutoDAO: " + ex.getMessage());
            return false;
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar parâmetros de conexão Alterar CompraProduto! Erro CompraProdutoDAO: " + ex.getMessage());
            }
        }
    }

    public List<Object> listar(int idCompra) {
        List<Object> resultado = new ArrayList<Object>();
        PreparedStatement stmt = null;
        ResultSet rs = null;
        String sql = "select c.* "
                + "from compra_produto c where c.id_compra = ? and c.status_compra_produto <> 'I';";
        try {
            stmt = conn.prepareStatement(sql);
            stmt.setInt(1, idCompra);
            rs = stmt.executeQuery();
            while (rs.next()) {
                CompraProduto compraProduto = new CompraProduto();
                compraProduto.setIdCompraProduto(rs.getInt("id_compra_produto"));
                compraProduto.setObservacaoCompraProduto(rs.getString("observacao_compra_produto"));
                compraProduto.setQtdCompraProduto(rs.getDouble("qtd_compra_produto"));
                try {
                    compraProduto.setProduto((Produto) new ProdutoDAOImpl().carregar(rs.getInt("id_produto")));
                } catch (Exception e) {
                    e.printStackTrace();
                }
                resultado.add(compraProduto);
            }
        } catch (SQLException ex) {
            System.out.println("Problemas no SQL ao listar CompraProduto! Erro: " + ex.getMessage());
            ex.printStackTrace();
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt, rs);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar os parâmetros de conexão! Erro CompraProdutoDAO: " + ex.getMessage());
                ex.printStackTrace();
            }
        }
        return resultado;
    }
}
